package lesson03;

import java.io.*;
import java.util.Scanner;

public class Demo_306 {

    public static void main(String[] args) {
        // 1. 获取用户输入的路径
        System.out.println("请输入要扫描的目录：");
        Scanner scanner = new Scanner(System.in);
        String rootPath = scanner.next();
        // 根据用户的输入创建一个文件对象
        File rootFile = new File(rootPath);
        // 2. 判断路径是否有效
        // 是否存在
        if (!rootFile.exists()) {
            System.out.println("输入的路径不存在.");
            return;
        }
        // 是否目录
        if (!rootFile.isDirectory()) {
            System.out.println("输入的路径不是一个有效目录.");
            return;
        }
        // 3. 获取用户输入的关键字
        System.out.println("请输入要查找的关键字:");
        String keyword = scanner.next();
        // 校验关键字
        if (keyword == null || keyword.isEmpty()) {
            System.out.println("输入的关键字不能为空.");
            return;
        }

        // 查找过程
        scan(rootFile, keyword);
    }

    private static void scan(File rootFile, String keyword) {
        // 1. 获取扫描目录下的所有子目录和普通文件
        File[] files = rootFile.listFiles();
        // 校验数组是否为空
        if (files.length == 0) {
            return;
        }

        // 遍历数组中的所有文件
        for (File file : files) {
            // 判断文件是不是普通文件
            if (file.isFile()) {
                // 1. 判断文件名是否包含关键字
                // 2. 读取文件内容，内容中是否包含关键字
                boolean bool = checkFile(file, keyword);
                if (!bool) {
                    // 没有到目标文件
                    continue;
                }
                // 接收用户的删除指令
                System.out.println("找到文件：" + file.getAbsolutePath() + "包含关键字:" + keyword
                        + ", 是否删除？(Y/N)");
                // 接收用户输入
                Scanner scanner = new Scanner(System.in);
                String opt = scanner.next();
                // 判断指令
                if (opt.toLowerCase().equals("y")) {
                    // 删除操作
                    file.delete();
                    System.out.println("删除文件 ： " + file.getAbsolutePath() + "成功");
                }

            } else {
                // File是目录，递归执行
                scan(file, keyword);
            }
        }
    }

    private static boolean checkFile(File file, String keyword) {
        String fileName = file.getName();
        if (fileName.contains(keyword)) {
            return true;
        }

        try (InputStream inputStream = new FileInputStream(file)) {
            Scanner scanner = new Scanner(inputStream);
            StringBuilder stringBuilder = new StringBuilder();

            while (true) {
                if (!scanner.hasNextLine()) {
                    break;
                }
                stringBuilder.append(scanner.nextLine());

            }
            if (stringBuilder.indexOf(keyword) > -1) {
                return true;
            }

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return false;
    }
}
